package com.yqh.Collection.List;

import java.util.LinkedList;

/**
 * LinkedList 集合的底层原理
 *
 * @author 阳秋豪
 * @createTime 2024/3/6
 */
public class Test4 {
    public static void main(String[] args) {
        /*------------------------ LinkedList 集合的底层原理 ------------------------*/
        //基于双链表实现的。
        //特点:查询慢，增删相对较快，但对首尾元素进行增删改查的速度是极快的。

        /*-------------------- LinkedList 新增首尾操作的特有方法 --------------------*/
        //1、public void addFirst(E e) 在该列表开头插入指定的元素
        //2、public void addLast(Ee)   在该列表开头插入指定的元素
        //3、public E getFirst()       返回此列表中的第一个元素
        //4、public E getLast()        返回此列表中的最后一个元素
        //5、public E removeFirst()    从此列表中删除并返回第一个元素
        //6、public E removeLast()     从此列表中删除并返回最后一个元素

        /*----------------------- LinkedList 集合的应用场景 -----------------------*/
        // 1、设计队列
        LinkedList<String> queue = new LinkedList<>();
        // 入队
        queue.addLast("1号");
        queue.addLast("2号");
        queue.addLast("3号");
        System.out.println("原队列元素 -- " + queue); // 原队列元素 -- [1号, 2号, 3号]
        // 出队
        System.out.println("第一个出队元素 -- " + queue.removeFirst()); // 第一个出队元素 -- 1号
        System.out.println("第二个出队元素 -- " + queue.removeFirst()); // 第二个出队元素 -- 2号
        System.out.println("队列剩余元素 -- " + queue); // 队列剩余元素 -- [3号]
        System.out.println("----------------------------------------------------------------");

        // 2、设计栈
        LinkedList<String> stack = new LinkedList<>();
        // 压栈 （push）
        stack.push("1号");
        stack.push("2号");
        stack.push("3号");
        System.out.println("原栈 -- " + stack); // 原栈 -- [1号, 2号, 3号]
        // 弹栈 （pop）
        System.out.println("第一个弹出元素 -- " + stack.pop()); // 第一个弹出元素 -- 3号
        System.out.println("第二个弹出元素 -- " + stack.pop()); // 第二个弹出元素 -- 2号
        System.out.println("栈剩余元素 --" + stack); // 栈剩余元素 --[1号]
    }
}
